{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 分类器的不确定度估计\n",
    "<p>sklearn接口还能给出分类器的不确定度估计，即对某个分类器的置信程度估计</p>\n",
    "<P>sklearn中有两个函数可用于分类器的不确定度估计:decision_function和predict_proba两个方法</P>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['red' 'red' 'blue' 'red' 'red']\n",
      "[1 1 0 1 1 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 1 1 1 1 1 0 0\n",
      " 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 0 1 1\n",
      " 0 1 0 1 1 0 0 0 0 0 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0 0]\n"
     ]
    }
   ],
   "source": [
    "# 以梯度提升决策树为例\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "from sklearn.datasets import make_circles\n",
    "from sklearn.model_selection import train_test_split\n",
    "import numpy as np\n",
    "X,y = make_circles(noise=0.25,factor=0.5,random_state=1)\n",
    "\n",
    "# 为了便于说明,将两个类别重命名为‘blue’ 和‘red'\n",
    "y_named = np.array(['blue','red'])[y]\n",
    "\n",
    "X_train,X_test,y_train_named,y_test_named,y_train,y_test = train_test_split(X,y_named,y,random_state=0)\n",
    "\n",
    "# 构建梯度决策树模型\n",
    "gbrt = GradientBoostingClassifier(random_state=0)\n",
    "gbrt.fit(X_train,y_train_named)\n",
    "\n",
    "print(y_named[:5])\n",
    "print(y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.决策函数\n",
    "<p>对于二分类的情况,decission_function返回值的形状是(n_samples,)。为每个样本都返回浮点数</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_test.shape:(25, 2)\n",
      "Decision function shape:(25,)\n"
     ]
    }
   ],
   "source": [
    "print(f\"X_test.shape:{X_test.shape}\")\n",
    "print(f\"Decision function shape:{gbrt.decision_function(X_test).shape}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于类别1来说,这个值表示模型对该数据点属于”正“的置信程度，。正值表示对正类的偏好,负值表示对\"反类的偏好\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "decision function:[ 4.13592603 -1.70169917 -3.95106099 -3.62609552  4.28986642  3.66166081]\n"
     ]
    }
   ],
   "source": [
    "print(f\"decision function:{gbrt.decision_function(X_test)[:6]}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "决策函数的正负性:[ True False False False  True  True False  True  True  True False  True\n",
      "  True False  True False False False  True  True  True  True  True False\n",
      " False]\n",
      "预测:['red' 'blue' 'blue' 'blue' 'red' 'red' 'blue' 'red' 'red' 'red' 'blue'\n",
      " 'red' 'red' 'blue' 'red' 'blue' 'blue' 'blue' 'red' 'red' 'red' 'red'\n",
      " 'red' 'blue' 'blue']\n"
     ]
    }
   ],
   "source": [
    "print(f\"决策函数的正负性:{gbrt.decision_function(X_test)>0}\")\n",
    "print(f\"预测:{gbrt.predict(X_test)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.预测概率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "predict_proba的输出是每个类别的概率,通常比decision_function的输出更容易理解。对于二分类问题,他的形状始终是(n_samples,2):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shpae of probabilities:(25, 2)\n"
     ]
    }
   ],
   "source": [
    "print(f\"Shpae of probabilities:{gbrt.predict_proba(X_test).shape}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.01573626 0.98426374]\n",
      " [0.84575653 0.15424347]\n",
      " [0.98112869 0.01887131]\n",
      " [0.97407033 0.02592967]\n",
      " [0.01352142 0.98647858]\n",
      " [0.02504637 0.97495363]]\n"
     ]
    }
   ],
   "source": [
    "# 显示predict_proba的前几个元素\n",
    "print(gbrt.predict_proba(X_test)[:6])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由上图可知,分类对于大多数结果置信程度都比较高"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1fdcaae0700>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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uWN37ty52zweDyKRiJOSknKTz+dj3759TrNmzWp59OjRO8qv+fPPP+3Onz9/Kz8/n+vt7e376aef5tja2lZlzP/55x/e9OnTXzp16tTN9u3blz958qTGee7fv/+zsWPH3uRwOFixYoXbV1991XTjxo0Pli9f3nTVqlXZYWFhxQUFBRyBQCBbuXKle79+/QqWLl36WCKRoKioqNqP/ydPnvCcnJykfD4fAPDSSy+VP3nyxMYQ50ebX/clNL4QydF4zd7tyGFCtic03kjXjBBiYRpUkCrPovIchQAAnqOwKpu6bfOme3Xdf1lZGScrK8u+b9++XkBlBsXd3b0CANq1a1cSHh7+n6FDh+aPHz8+X9u+zpw54/zzzz//Jf+3u7u7VHmbpUuXehw6dKgRADx+/Jh//fp1O39//9L79+/bvv32261ef/31gvDw8EJdjs+yNe96Mwxj8ooJ8ixqM6fK74xmTpyqbOrGzdvrfI0A675O5lRcWMARumhOuPGc3VFcmG+w4Hr48OF5PF5lNyUSibhjxoz5z927d+0YhmErKipUBl9hYWH59vb2rL29vUQoFFY8ePCA5+npWXXv+dSpUw5BQUFF7du3LwcADw+PGtfs77//thk2bFjLnJwcfnl5OadVq1ZlANCtW7dnn3zySavRo0eLxo0bl+fp6Snr1q1b8ZQpU16qqKjgjBw5Mq979+4livsy539bokIxp00jzSNVWrswEBU+o2tGCLE4DebXozyLat91eLVO0r7rcKauY1PlWJbFyy+/XCIfl3X79u0b586dywKAkydPZr3//vs5V65ccQgICPDRNF5Lvi+GUZ8AOXjwoNPp06edLl++fPPWrVs3vL29S0pKSjju7u7SzMzMG3369Clau3Ztk7Fjx76ky/Fbtmwpz5wCAP755x+bli1bam6kgcmzqNHdqr/x6G4MY4ixqXLWfJ3MycHZRSYp0FyzXFKYAwfnRjUCiNpydHSsGtYQHR3dolevXkVZWVnXDxw48Gd5ebnK/ksxA8flciGRSKpdIG3XDACmT5/eetq0aU9v3759Y/Xq1dllZWUcAFi8ePHjmJiY7JKSEk737t29U1NT7QYNGvTszJkzt1q0aFE+YcKE/6xevbqx4r6aNm0qKSoq4sqv5d27d22aNGlikgsrdBbIsvM1x8P3ClgInR3omhFCLE6DCVKVs6hy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\n",
      "text/plain": [
       "<Figure size 936x360 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import mglearn\n",
    "import matplotlib.pyplot as plt\n",
    "fig,axes = plt.subplots(1,2,figsize=(13,5))\n",
    "\n",
    "mglearn.tools.plot_2d_separator(gbrt,X,ax=axes[0],alpha=0.4,fill=True,cm=mglearn.cm2)\n",
    "scores_image = mglearn.tools.plot_2d_scores(gbrt,X,ax=axes[1],alpha=0.5,cm=mglearn.ReBl,function='predict_proba')\n",
    "for ax in axes:\n",
    "    # 画出训练点和测试点\n",
    "    mglearn.discrete_scatter(X_test[:,0],X_test[:,1],y_test,markers='^',ax=ax)\n",
    "    mglearn.discrete_scatter(X_train[:,0],X_train[:,1],y_train,markers='o',ax=ax)\n",
    "    ax.set_xlabel('F 0')\n",
    "    ax.set_ylabel(\"F 1\")\n",
    "cbar = plt.colorbar(scores_image,ax=axes.tolist())\n",
    "axes[0].legend(['Test class 0',\"Test class 1\",'Train class 0',\"Train class 1\"],ncol=4,loc=(0.1,1.1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 多分类问题的不确定度\n",
    "## 多分类的决策函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Decision function shape:(38, 3)\n",
      "前几个元素:\n",
      ":[[-1.995715    0.04758267 -1.92720695]\n",
      " [ 0.06146394 -1.90755736 -1.92793758]\n",
      " [-1.99058203 -1.87637861  0.09686725]\n",
      " [-1.995715    0.04758267 -1.92720695]\n",
      " [-1.99730159 -0.13469108 -1.20341483]\n",
      " [ 0.06146394 -1.90755736 -1.92793758]]\n"
     ]
    }
   ],
   "source": [
    "# 以鸢尾花分类问题为列\n",
    "from sklearn.datasets import load_iris\n",
    "iris = load_iris()\n",
    "X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=42)\n",
    "\n",
    "gbrt = GradientBoostingClassifier(learning_rate=0.01,random_state=0)\n",
    "gbrt.fit(X_train,y_train)\n",
    "print(f\"Decision function shape:{gbrt.decision_function(X_test).shape}\")\n",
    "print(f\"前几个元素:\\n:{gbrt.decision_function(X_test)[:6,:]}\")\n",
    "# 对于多分类问题:得分较低的类别可能性较小.分数较高类别可能性较大"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "得分最高:\n",
      "[1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0 0 0 1 0 0 2 1\n",
      " 0]\n",
      "预测结果:\n",
      "[1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0 0 0 1 0 0 2 1\n",
      " 0]\n"
     ]
    }
   ],
   "source": [
    "print(f\"得分最高:\\n{np.argmax(gbrt.decision_function(X_test),axis=1)}\")\n",
    "print(f\"预测结果:\\n{gbrt.predict(X_test)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 多分类预测概率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "predicted probabilities:\n",
      "[[0.10217718 0.78840034 0.10942248]\n",
      " [0.78347147 0.10936745 0.10716108]\n",
      " [0.09818072 0.11005864 0.79176065]\n",
      " [0.10217718 0.78840034 0.10942248]\n",
      " [0.10360005 0.66723901 0.22916094]\n",
      " [0.78347147 0.10936745 0.10716108]]\n",
      "Sums:[1. 1. 1. 1. 1. 1.]\n"
     ]
    }
   ],
   "source": [
    "# 显示predict_porba的前几个元素\n",
    "print(f\"predicted probabilities:\\n{gbrt.predict_proba(X_test)[:6]}\")\n",
    "# 显示每行和的和都是1\n",
    "print(f\"Sums:{gbrt.predict_proba(X_test)[:6].sum(axis=1)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Arg of max:\n",
      "[1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0 0 0 1 0 0 2 1\n",
      " 0]\n",
      "Predictions:\n",
      "[1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0 0 0 1 0 0 2 1\n",
      " 0]\n"
     ]
    }
   ],
   "source": [
    "# 同样我们也可以计算predict_proba的argmax来再现预测结果\n",
    "print(f\"Arg of max:\\n{np.argmax(gbrt.predict_proba(X_test),axis=1)}\")\n",
    "print(f\"Predictions:\\n{gbrt.predict(X_test)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集中的类别:['setosa' 'versicolor' 'virginica']\n",
      "前10条的预测:['versicolor' 'setosa' 'virginica' 'versicolor' 'versicolor' 'setosa'\n",
      " 'versicolor' 'virginica' 'versicolor' 'versicolor']\n",
      "argmax of decision function:[1 0 2 1 1 0 1 2 1 1]\n",
      "argmax combined with classes_:['versicolor' 'setosa' 'virginica' 'versicolor' 'versicolor' 'setosa'\n",
      " 'versicolor' 'virginica' 'versicolor' 'versicolor']\n"
     ]
    }
   ],
   "source": [
    "# 使用真实的分类名称\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "logreg = LogisticRegression(max_iter=300)\n",
    "\n",
    "# 用iris数据集的类别名称来标识每一个目标值\n",
    "named_target = iris.target_names[y_train]\n",
    "logreg.fit(X_train,named_target)\n",
    "\n",
    "print(f\"训练集中的类别:{logreg.classes_}\")\n",
    "print(f\"前10条的预测:{logreg.predict(X_test)[:10]}\")\n",
    "\n",
    "argmax_dec_func=np.argmax(logreg.decision_function(X_test),axis=1)\n",
    "print(f\"argmax of decision function:{argmax_dec_func[:10]}\")\n",
    "print(f\"argmax combined with classes_:{logreg.classes_[argmax_dec_func][:10]}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.   0.82 0.17]\n",
      " [0.94 0.06 0.  ]\n",
      " [0.   0.   1.  ]\n",
      " [0.01 0.79 0.21]\n",
      " [0.   0.77 0.23]\n",
      " [0.95 0.05 0.  ]\n",
      " [0.08 0.91 0.02]\n",
      " [0.   0.16 0.84]\n",
      " [0.   0.78 0.22]\n",
      " [0.03 0.94 0.03]]\n"
     ]
    }
   ],
   "source": [
    "print(np.round(logreg.predict_proba(X_test)[:10],2)) # predict_proba的预测概率结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
